package kotlindemo.com.kotlindemo

import java.lang.StringBuilder

//第三章语法
fun main(args: Array<String>) {
    //---------------with函数用法（连续调用同一个对象的多个方法时让代码变动更加精简）
    //首先给with函数第一个参数传入StringBuilder，那么接下来这个Lambda函数上下文都是这个StringBuilder
    var list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
    val result = with(StringBuilder()) {
        append("Start eat Fruit.\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("Ate all fruits.")
                .toString()
    }
    println(result)
    //---------------run函数用法（run函数是不能直接调用的，必须要调用某个对象的run函数，run函数只接收Lambda表达式作为参数）
    val result1 = StringBuilder().run {
        append("Start eat Fruit.\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("Ate all fruits.")
                .toString()
    }
    println(result1)
    //---------------apply函数用法（与run函数及其相似，但是apply函数无法指定返回值，而是自动返回调用对象本身）
    //另一示例用法见LoginActivity
    val result2 = StringBuilder().apply {
        append("Start eat Fruit.\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("Ate all fruits.")

    }
    println(result2.toString())
}

